﻿#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

typedef char BTDataType;
//用链表来实现二叉树结构
typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;

//前序遍历：根左右
void PreOrder(BTNode* root);
//中序遍历：左根右
void InOrder(BTNode* root);
//后序遍历：左右根
void PostOrder(BTNode* root);
//
//二叉树结点的个数
int BinaryTreeSize(BTNode* root);
// 二叉树叶子结点的个数
int BinaryTreeLeafSize(BTNode* root);
// 二叉树第K层结点个数
int BinaryTreeLevelKSize(BTNode* root,int K);
//⼆叉树的深度/⾼度
int BinaryTreeDepth(BTNode* root);
// ⼆叉树查找值为x的结点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x);
//⼆叉树销毁
void BinaryTreeDestory(BTNode** root);

//层序遍历
void LevelOrder(BTNode* root);
//判断是否为完全二叉树
bool BinaryTreeComplete(BTNode* root);
